﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using EntGuayasSLA.BL.Listas;
using Ext.Net;
using EntGuayasSLA.BL;
using System.IO;
using System.Text;
using EntGuayasSLA.BL.Licenciamiento;
using EGuayas.Web.Usuario;
using EGuayas.Web.Licenciamiento.promotor.tabs;
using EntGuayasSLA.BL.Listas.Criterias;

namespace EGuayas.Web.Auditoria.Expedientes
{
    public partial class pgNuevoExpediente : pgBase
    {
        /// <summary>
        /// Session georeferencia
        /// </summary>
        protected string ExpedienteIdTmp
        {
            get
            {
                if (Session[SessionPage.PageGestionExpAud + "_ExpedienteIdTmp"] == null)
                    return "";
                else
                    return (Session[SessionPage.PageGestionExpAud + "_ExpedienteIdTmp"].ToString());
            }
            set
            {
                Session[SessionPage.PageGestionExpAud + "_ExpedienteIdTmp"] = value;
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!X.IsAjaxRequest)
                {
                    ProvinciaLista provinciaList = ProvinciaLista.GetProvinciaLista();
                    stoProvincia.DataSource = provinciaList.Where(prov=> prov.Nombre.ToUpper()=="GUAYAS").ToList();
                    stoProvincia.DataBind();
                    //Setear evento modificar
                   
                    SetSessionPage setSession = new SetSessionPage(SessionPage.PageGestionExpAud,
                                                                   Valores.PageEvento_Nuevo); 
                    //
                    this.frmDocumentos.Disable();                   
                    //Asignar valor de la session evento                  
                    this.dtfFecha.SetValue(DateTime.Now);
                    this.dtfFecha.ReadOnly = true;

                    string idExpediente = Request.QueryString.Get("id");

                    if (!string.IsNullOrEmpty(idExpediente))
                    {
                        //Setear evento 
                        setSession = new SetSessionPage(SessionPage.PageGestionExpAud,
                                                                   Valores.PageEvento_Modificar);
                        //
                        ExpedienteIdTmp = idExpediente;
                        Dynamic respuestas = new Dynamic();

                        Expediente expObjUpdate = Expediente.GetEditableRoot(Guid.Parse(idExpediente));
                        Promotores objPromotor = Promotores.GetEditableRoot(Guid.Parse(expObjUpdate.PromotorId));
                        Parroquia objParrExp = Parroquia.GetEditableRoot(Guid.Parse(expObjUpdate.ParroquiaId));

                        respuestas.Add("Nombre", expObjUpdate.Nombre);
                        respuestas.Add("Tipo", expObjUpdate.Tipo);
                        respuestas.Add("Fecha", expObjUpdate.FechaCreacion.ToShortDateString());
                        respuestas.Add("Categoria", expObjUpdate.Categoria);
                        respuestas.Add("Descripcion", expObjUpdate.Descripcion);
                        respuestas.Add("Provincia", objParrExp.ProvinciaId);
                        respuestas.Add("Canton", objParrExp.CantonId);
                        respuestas.Add("Parroquia", expObjUpdate.ParroquiaId);
                        respuestas.Add("Comunidad", expObjUpdate.Comunidad);
                        respuestas.Add("Direccion", expObjUpdate.Direccion);

                        this.frmExpediente.SetValues(respuestas.Dictionary);
                        X.Js.Call("SetLocalidadExpediente", objParrExp.ProvinciaId, objParrExp.CantonId, objParrExp.Id, true);

                        //Habilitar tab documentos
                        this.frmDocumentos.Enable();
                        //Setear variablessession para wuc documentos
                        ExpedienteAuditoria objExpAud = ExpedienteAuditoria.GetEditableRoot(ExpedienteIdTmp);
                        SetSession(idExpediente, objExpAud.Estado);

                       
                    }
                    else 
                    {
                        ExpedienteIdTmp = "";
                    }
               
                } //if (!X.IsAjaxRequest)
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
        }

        private void SetSession(string idExpediente, string estado)
        {
            Session[SessionPage.PageGestionExpAud + Constantes.Expediente] = idExpediente;
            Session[SessionPage.PageGestionExpAud + "_estadoAud"] = estado;
        }
         
        /// <summary>
        /// Grabar información de expediente
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnSave_Click(object sender, DirectEventArgs e)
        {
            try
            { 
              
                var dataItem = JSON.Deserialize<Dictionary<string, string>>(e.ExtraParams["prmValues"]);
                Expediente objExp = null;
                if (!string.IsNullOrEmpty(ExpedienteIdTmp))
                {
                    Guid idExp = Guid.Parse(ExpedienteIdTmp);
                    objExp = Expediente.GetEditableRoot(idExp);
                }
                else
                {
                    objExp = Expediente.NewEditableRoot();
                    objExp.Id = System.Guid.NewGuid();
                }
                //Obtener secuencia
                DateTime saveNow = DateTime.Now;
                Secuencia secuExp = Secuencia.GetEditableRoot(saveNow.Year, Constantes.Licenciamiento, Valores.Codigo_CHAR_Si);
                //Rellenar un entero con ceros iniciales hasta una longitud concreta
                int numeroSecuencia = secuExp.Numero;
                int decimalLength = 4;
                //Crear o modificar expediente             
                objExp.ParroquiaId = dataItem["Parroquia"];
                //Expediente auditoria con rol promotor
                Guid idPromotor = Guid.Parse(GetSessionUsuario.PersonaId);
                Promotores objPromotor = Promotores.GetEditableRoot(idPromotor);
                //objExp.PromotorId = dataItem["IdPromotor"];
                objExp.PromotorId = objPromotor.Id.ToString();
                objExp.Nombre = dataItem["Nombre"];
                objExp.Tipo = dataItem["Tipo"];
                objExp.Descripcion = dataItem["Descripcion"];
                objExp.Comunidad = dataItem["Comunidad"];
                //objExp.Categoria = dataItem["Categoria"];
                //GPG-13-0001-L
                objExp.Codigo = Valores.CodigoInicialExpediente_A + saveNow.Year.ToString().Substring(2) + "-" + numeroSecuencia.ToString("D" + decimalLength.ToString()) + Valores.CodigoInicialExpediente_B;
                objExp.Direccion = dataItem["Direccion"];
                objExp.FechaCreacion = DateTime.Parse(dataItem["Fecha"]);
                objExp.NumeroCategoria = 1;
                if (string.IsNullOrEmpty(ExpedienteIdTmp))
                {
                    objExp.Estado = "I";//INACTIVO
                }
                //
                objExp.Save();
                if (string.IsNullOrEmpty(ExpedienteIdTmp))
                {
                    ExpedienteAuditoria objExpAud = ExpedienteAuditoria.NewEditableRoot();
                    objExpAud.Id = System.Guid.NewGuid();
                    objExpAud.ExpedienteId = objExp.Id.ToString();
                    objExpAud.Codigo = objExp.Codigo;
                    objExpAud.Estado = Valores.Codigo_Estado_Fase_Inicial;
                    objExpAud.Tipo = Valores.Codigo_Tipo_Aud_Interno;
                    objExpAud.Save();
                  
                }
                //Setear georefrencia
               
                ExpedienteIdTmp = objExp.Id.ToString();
                btnSave.Disable();


            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
        }
        private void beginWucLoadDoc(ExpedienteAuditoria objExpAud)
        {
            wucLoadDoc objLoadDoc = (wucLoadDoc)this.uc_load_exp.UserControls[0];
            //Setear variablessession para wuc documentos
            SetSession(objExpAud.ExpedienteId, Valores.Codigo_Estado_Fase_Inicial);
            objLoadDoc.WucInit();
            //Habilitar tab documentos
            this.frmDocumentos.Enable();
        }
        [DirectMethod(ShowMask = true)]
        public void EnabledTab2()
        {

            try
            {
                if (GetSessionPage.GetSession(SessionPage.PageGestionExpAud) == Valores.PageEvento_Nuevo)
                {
                    ExpedienteAuditoria objExpAud = ExpedienteAuditoria.GetEditableRoot(ExpedienteIdTmp);
                    beginWucLoadDoc(objExpAud);
                    X.Msg.Show(new MessageBoxConfig
                    {
                        Buttons = MessageBox.Button.OK,
                        Icon    = MessageBox.Icon.INFO,
                        Title   = "Información",
                        Message = string.Format("<br/><b>{0}</b>", "Expediente creado")
                    });
                
                }
                if (GetSessionPage.GetSession(SessionPage.PageGestionExpAud) == Valores.PageEvento_Modificar)
                { 
                   this.btnSaveGeoRef.FireEvent("click",new object());
                   X.Msg.Show(new MessageBoxConfig
                   {
                       Buttons = MessageBox.Button.OK,
                       Icon = MessageBox.Icon.INFO,
                       Title = "Información",
                       Message = string.Format("<br/><b>{0}</b>", "Expediente modificado")
                   });
                
                }
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }


        }
        protected void OnLoadDocAdded(object sender, ComponentAddedEventArgs e)
        {
            try
            {
                Ext.Net.Panel panel = (Ext.Net.Panel)e.Control;

                SetCustomConfigWucDocAud(panel, SessionPage.PageGestionExpAud);
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }

        }
        protected void cbbProvincia_Select(object sender, DirectEventArgs e)
        {
            try
            {
                var cantonList = CantonLista.GetCantonLista(e.ExtraParams["Id"]);
                var cantonesSinGuayaquil = cantonList.Where(cl => cl.Nombre.ToUpper() != "GUAYAQUIL").ToList();

                cbbCanton.Reset();
                cbbParroquia.Reset();
                stoParroquia.RemoveAll();
                stoCanton.DataSource = cantonesSinGuayaquil;
                stoCanton.DataBind();
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
        }
        protected void cbbCanton_Select(object sender, DirectEventArgs e)
        {
            try
            {
                var parroquiaList = ParroquiaLista.GetParroquiaLista(e.ExtraParams["Id"]);
                cbbParroquia.Reset();
                stoParroquia.DataSource = parroquiaList;
                stoParroquia.DataBind();
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
        }
        [DirectMethod(ShowMask = true)]
        public ListLocalidad GetCanton(string Id, string IdParroquia)
        {
            ListLocalidad valReturn = new ListLocalidad();
            try
            {

                valReturn.ListCanton = CantonLista.GetCantonLista(Id);
                valReturn.ListParroq = ParroquiaLista.GetParroquiaLista(IdParroquia);

                this.cbbCanton.Reset();
                this.cbbParroquia.Reset();
                this.stoParroquia.RemoveAll();


                this.cbbParroquia.Reset();
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
            return (valReturn);
        }
       
        
    }
}